<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Dir_lst( $this );

	class Dir_lst extends Lst
	{
	function Dir_lst( &$oModule )
		{
			$this->Lst( $oModule );
		}

	function setLevel()
		{
			switch ( $this->getOptionView() )
			{
				case 'E':
				case 'L':
					$this->aShowColumns = array( 'Nombre' , 'Ext', 'Dir',  'Tam', 'Fecha');
					break;
			}
		}
	function makeColumn ( $aRow, $cField )
		{
			switch( $cField )
			{
				case 'Tam':
					if ( $aRow['nqTamano'] > 1048576 )
						$cReturn =  ceil($aRow['nqTamano'] / 10485.76 ) / 100 . "Mb";
					elseif ( $aRow['nqTamano'] > 1024 )
						$cReturn =  ceil($aRow['nqTamano'] / 10.24 ) / 100 . "Kb";
						else
							$cReturn =  $aRow['nqTamano'];
					break;
				default:
					return false;
			break;
			}
			return $cReturn;
		}
	function initialize()
		{
			// Obtiene de su filtro los parametros que necesita para armar el query
			$oFiltro = $this->oModule->loadClass( 'Dir_frm' );
			$this->aFields = array_merge (  (array)$oFiltro->getFieldArray() , (array)$this->aFields);
			// Setea el titulo y la descripcion de la tabla
			$this->setTitle ( "Directorio" );
			$this->setSummary( "Esta tabla contiene el listado de archivos de un directorio" );
			$this->addColumn ( 'Nombre', 'cArchivo', true );
			$this->addColumn ( 'Ext', 'cExtension', true );
			$this->addColumn ( 'Dir', 'cDirRelativo', true );
			$this->addColumn ( 'Tam', '', 'nqTamano' );
			$this->addColumn( 'Fecha', 'dArchivo', true );
		}
	function open()
		{
			$this->oRecordset = new RecordsetMemory();
			extract($this->aFields);
			// Quita los * del Filtro
				$cFiltro = str_replace( '*', '', $cFiltro );
			// Arma una matriz con los datos
				$aFiltroArc  = explode( ',', $cFiltro );
				$aDirectorio = array($cDirectorio);
				while ( count($aDirectorio) > 0 )
				{
					$cDirActual = array_pop($aDirectorio);
					if ( !file_exists( $cDirActual ) )
					{
						addMessage("El directorio no existe ($cDirActual)" );
					} else
					{
						$fd = opendir( $cDirActual );
						while ( $cArchivo = readdir($fd) )
						{
							$cArchivoActual = $cDirActual . "/" . $cArchivo;
							if ( in_array( $cArchivo, $aFiltroDir ) == FALSE )
							{
								if ( filetype($cArchivoActual) == 'dir' && $bRecursivo == 1 )
								{
									array_push($aDirectorio, $cDirActual  . '/' .$cArchivo);
								}
								if ( filetype($cArchivoActual ) == 'file' )
								{
									// Obtiene la Extension
									$nPos = strrpos($cArchivo, '.' );
									if ( $nPos != FALSE )
									{
										$cExtension =  substr( $cArchivo, $nPos + 1);
										$cArchivo   =  substr( $cArchivo, 0, $nPos );
									} else
										$cExtension ="";
									if ( $cFiltro == '' )
									{
										$bMostrar = true;
									} else
									{
										$bMostrar = false;
										// Aplica un Filtro por Extensiones. Si coincide algo sale del ciclo con bMostrar en Verdadero
										for (  $nIndex = 0 ; $nIndex < count($aFiltroArc) && $bMostrar == false ; $nIndex++ )
										{
											if ( eregi( $aFiltroArc[$nIndex],  "$cArchivo.$cExtension" ) )
											{
												$bMostrar = true;
											}
										}
									}
									if ( $bMostrar )
									{
										$cDirRelativo = substr($cDirActual, strlen($cDirectorio) + 1);
										$dArchivo = date('Y-m-d', fileatime($cArchivoActual) );
										$nqItems++;
										$this->oRecordset->addRow ( array( 'cArchivo' => $cArchivo, 'cExtension' =>$cExtension, 'cDirRelativo' =>$cDirRelativo, 'cDirActual' => $cDirActual , 'dArchivo' => $dArchivo , 'nqTamano' =>filesize($cArchivoActual) ) );
									}
								}
							}
						}
						closedir($fd);
					} 
				}

			// usort ( $aArchivos, "ordenTabla");
			$this->oPaging->setTotalItems ( $nqItems);
			return true;
		}
	function makeListActions()
		{
			$cParametroRegistro =  $this->getFieldString();
		}
	function makeRowActions( $aRow )
		{
			$cParametroRegistro = "cArchivo=" . $aRow[cArchivo] . "&amp;cDirectorio=" . $aRow[cDirRelativo];
			$this->addRowAction( BAJAR_UN_ARCHIVO, $cParametroRegistro );
			$this->addRowAction (ELIMINAR_ARCHIVO, $cParametroRegistro  );
			$cExtension = strtoupper($aRow[1]);
			switch ( $cExtension ) {
				case "DBF":
					$this->addRowAction (CONSULTAR_DATOS_DE_UNA_DBF, $cParametroRegistro );
					break;
				case "TXT":
					$this->addRowAction (VER_ARCHIVO_TEXTO, $cParametroRegistro);
					break;
				case "HTML":
				case "HTM":
					$this->addRowAction (VER_ARCHIVO_HTML, $cParametroRegistro  );
					break;
			}			
		}
	}
	function ordenTabla( $aItemA, $aItemB)
	{
		global $nOrden, $cDireccion;
		$nSentido = ( $cDireccion == "asc" ) ? 1: -1;

		if ($aItemA[$nOrden] == $aItemB[$nOrden] ) return 0;
		return (($aItemA[$nOrden] > $aItemB[$nOrden] ) ? -1 : 1 ) * $nSentido;
	}
?>
